// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})
// 数据库操作对象
const db = cloud.database()
// 表格操作对象
var xlsx = require('node-xlsx');
// 邮件处理对象
var nodemailer = require('nodemailer')
//创建一个SMTP客户端配置
var config = {
  host: 'smtp.126.com', //网易163邮箱 smtp.126.com
  port: 25, //网易邮箱端口 25
  auth: {
    user: 'zhouhu_1992_xiao01@126.com', //邮箱账号
    pass: 'WVZPBXIKVPSBZDKP' //邮箱的授权码
  }
};
// 创建一个SMTP客户端对象
var transporter = nodemailer.createTransport(config);
const MAX_LIMIT = 100
const _ = db.command
// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()

  console.log("天数--->" + event.tianshu);
  console.log("日期--->" + event.riqi);
  console.log("网点编码--->" + event.websitecode)

  //----------------------------获取网点绑定的邮箱-----------------------------------------
  var email = await db.collection('es_website').where({
    wdbm: event.websitecode
  }).get().then(res => {
    if (res.data[0].email == '') {
      return '1003'
    } else {
      return res.data[0].email
    }
  }).catch(err => {
    console.log(err)
    return "1002"
  })
  if (email == '1002') {
    return {
      code:1002,
      msg:'获取绑定邮箱失败'
    }
  } else if(email =='1003') {
    return {
      code:1003,
      msg:'该账号未绑定邮箱'
    }
  }
  // ---------------------------------获取需要发送邮件的数据------------------------------------------------
  var riqi = event.riqi;
  var tianshu = event.tianshu;
  // 数据结果集合
  var results = [];
  if (event.tianshu == 0) {
    // 按照选定日期查数据
    //先取出集合记录总数
    const countResult = await db.collection('es_customer').where({
      wdbm: event.websitecode,
      rq: riqi
    }).count()
    const total = countResult.total
    console.log("数据库中数据的长度" + total)
    // 计算需分几次取
    const batchTimes = Math.ceil(total / 100)
    console.log("需要取的次数" + batchTimes);
    // 承载所有读操作的 promise 的数组
    const tasks = []
    for (let i = 0; i < batchTimes; i++) {
      const promise = db.collection('es_customer').where({
        wdbm: event.websitecode,
        rq: riqi
      }).skip(i * MAX_LIMIT).limit(MAX_LIMIT).get()
      tasks.push(promise)
    }
    if (tasks.length != 0) {
      // 等待所有
      var datas = (await Promise.all(tasks)).reduce((acc, cur) => {
        return {
          data: acc.data.concat(cur.data),
        }
      })
      results = datas.data;
    }
    console.log("获取到的数据长度----" + results.length)
  } else {
    // 按照时间段获取数据
    // 按照选定日期查数据
    //先取出集合记录总数
    const countResult = await db.collection('es_customer').where({
      wdbm: event.websitecode,
      ybcts: _.lt((tianshu + 1))
    }).count()
    const total = countResult.total
    console.log("数据库中数据的长度" + total)
    // 计算需分几次取
    const batchTimes = Math.ceil(total / 100)
    console.log("需要取的次数" + batchTimes);
    // 承载所有读操作的 promise 的数组
    const tasks = []
    for (let i = 0; i < batchTimes; i++) {
      const promise = db.collection('es_customer').where({
        wdbm: event.websitecode,
        ybcts: _.lt((tianshu + 1))
      }).skip(i * MAX_LIMIT).limit(MAX_LIMIT).get()
      tasks.push(promise)
    }

    if (tasks.length != 0) {
      // 等待所有
      var datas = (await Promise.all(tasks)).reduce((acc, cur) => {
        return {
          data: acc.data.concat(cur.data),
        }
      })
      results = datas.data;
    }
    console.log("获取到的数据长度----" + results.length)
  }
 if (results.length == 0) {
    return {
      code: '1001',
      msg: '没有符合条件的数据'
    }
  }

  // 进行邮件发送
  var data = [];
  var title = ['姓名', '身份证号码', '联系电话', '体温','日期','具体日期','网点名称','业务类型'];
  data.push(title);
  //再把每一行数据加进去
  results.forEach(function (result) {
    var ele = [];
    ele.push(result.xm);
    ele.push(result.sfz);
    ele.push(result.dh);
    ele.push(result.tw);
    ele.push(result.rq);
    ele.push(result.xxsj);
    ele.push(result.wdmc);
    ele.push(result.ywlx);
    data.push(ele);
  });
  //由于各列数据长度不同，可以设置一下列宽
  const options = {
    '!cols': [{
      wch: 5
    }, {
      wch: 20
    }, {
      wch: 15
    }, {
      wch: 5
    },{
      wch: 20
    },{
      wch: 25
    },{
      wch: 30
    },{
      wch: 10
    }]
  };
  //生成表格
  var buffer = xlsx.build([{
    name: 'sheet1',
    data: data
  }], options);
  let dataCVS = event.websitecode + '.xlsx' // 文件名称
  var fileres = await cloud.uploadFile({
    cloudPath: dataCVS,
    fileContent: buffer, //excel二进制文件
  })
  const fileUrl = [fileres.fileID]
  const result = await cloud.getTempFileURL({
    fileList: fileUrl,
  })
  var downloadUrl = result.fileList[0].tempFileURL
  // 邮件发送
  // 创建一个邮件对象
  var mail = {
    // 发件人
    from: '农商行信息科技部 <zhouhu_1992_xiao01@126.com>',
    // 主题
    subject: '手动触发获取数据',
    // 收件人
    to: email,
    //to: '1240016177@qq.com',
    // 邮件内容，text或者html格式
    text: '', //可以是链接，也可以是验证码
    attachments: [{
      filename: event.websitecode + ".xlsx",
      path: downloadUrl
    }]
  };

  let emailResult = transporter.sendMail(mail);
  return {
    code: 1000,
    msg: '数据已经发送到绑定邮箱'
  }; 
}